Approche algébrique du typage d'un langage à la ML avec objets, sous-typage et multi-méthodes

نویسنده

  • Alexandre Frey
چکیده

class ObjetColoré { c : Couleur; } ObjetColoré·c : ObjetColoré 7→ Couleur class Point { x : int; y : int; } Point·x : Point 7→ int Point·y : Point 7→ int class PointColoré v Point,ObjetColoré {} PointColoré·x : PointColoré 7→ int PointColoré·y : PointColoré 7→ int PointColoré·c : PointColoré 7→ Couleur class List〈α⊕〉 {} class Cons〈α⊕〉 v List { head : α; tail : C List〈α〉; } ∀t,Cons·head : Cons〈t〉 7→ t ∀t,Cons·tail : Cons〈t〉 7→ List〈t〉 class Nil〈α⊕〉 v List {} Remarquons que l’abstraction Point·x n’est pas directement applicable à un type dans #PointColoré : il faut d’abord convertir le type du point coloré en un point normal avant de pouvoir extraire le champ x par l’accesseur Point·x. Notons également comment l’abstraction Cons·head traite le polymorphisme : cette fonction est capable d’extraire le type de la tête d’une liste pour tous les types t possibles. Il est intéressant de remarquer que l’axiome (CHAMPS-COVARIANTS) ne permet pas d’écrire n’importe quel type pour les champs. Par exemple, le constructeur Cons étant covariant, on a l’inégalité Cons〈int〉 6 Cons〈rat〉. Par l’axiome (CHAMPS-COVARIANTS), on doit donc avoir int 6 rat, ce qui est bien le cas. En revanche, si le type du champ head avait été α → α, cela aurait conduit à une contradiction. L’axiome impose donc que les paramètres de type d’une déclaration de classe apparaissent dans les types des champs avec une variance compatible avec leur variance déclarée et qui détermine l’ordre de soustypage. D’une façon également intéressante, l’axiome permet aussi une redéfinition covariante du type des champs dans les sous-classes. Par exemple, on peut écrire : class Segment { p1, p2 : Point; } class SegmentColoré v Segment { p1, p2 : PointColoré; } En revanche, la déclaration suivante est interdite : class Illégale v Segment { p1, p2 : bool; } Version 2.0 (Soutenance) du 7 juin 2004 3.9. TYPAGE DES PRIMITIVES 55

برای دانلود متن کامل این مقاله و بیش از 32 میلیون مقاله دیگر ابتدا ثبت نام کنید

ثبت نام

اگر عضو سایت هستید لطفا وارد حساب کاربری خود شوید

منابع مشابه

The Recursive Record Semantics of Objects Revisited

In a call-by-value language, representing objects as recursive records requires using an unsafe xpoint. We design, for a core language including extensible records, a type system which rules out unsafe recursion and still supports the reconstruction of a principal type. We illustrate the expressive power of this language with respect to object-oriented programming by introducing a sub-language ...

متن کامل

GADT meet Subtyping

While generalized abstract datatypes (GADT) are now considered well-understood, adding them to a language with a notion of subtyping comes with a few surprises. What does it mean for a GADT parameter to be covariant? The answer turns out to be quite subtle. It involves fine-grained properties of the subtyping relation that raise interesting design questions. We allow variance annotations in GAD...

متن کامل

Aspects logiques

Ceci est la version 6 de la deuxième partie du cours de lambda-calcul, datant du 05 avril 2016 (merci à Nathanaël Courant et à David Baelde). La version 5 datait du 02 juin 2014. La version 4 datait du 28 janvier 2011. (Bizarrement, je n’avais pas remarqué quelques erreurs présentes depuis dix ans dans la démonstration des théorèmes de normalisation forte. Merci à Hang Zhou et à Arthur Milchior...

متن کامل

Évaluation de efficacité des implémentations de l'héritage multiple en typage statique

Résumé. La programmation par objets présente une apparente incompatibilité entre trois termes : l’héritage multiple, l’efficacité et l’hypothèse du monde ouvert — en particulier, le chargement dynamique. Cet article présente des résultats d’expérimentations exhaustives comparant l’efficacité de différentes techniques d’implémentation (coloration, BTD, hachage parfait, ...) dans le contexte de d...

متن کامل

Typage des horloges périodiques en Lucy-n

Lucy-n est un langage permettant de programmer des réseaux de processus communiquant à travers des buffers de taille bornée. La taille des buffers et les rythmes d’exécution relatifs des processus sont calculés par une phase de typage appelée calcul d’horloge. Ce typage nécessite la résolution d’un ensemble de contraintes de sous-typage. L’an dernier, nous avons proposé un algorithme de résolut...

متن کامل

ذخیره در منابع من


  با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید

برای دانلود متن کامل این مقاله و بیش از 32 میلیون مقاله دیگر ابتدا ثبت نام کنید

ثبت نام

اگر عضو سایت هستید لطفا وارد حساب کاربری خود شوید

عنوان ژورنال:

دوره   شماره 

صفحات  -

تاریخ انتشار 2004